/// ---
/// type Immediate
/// interface: Lazy
/// ---
declare const __lazy: unique symbol;
type __LAZY = typeof __lazy;
interface Lazy<T = any> {
  [__lazy]: T;
}
type GetLazy<L extends Lazy> = L[__LAZY];

type OptionNorm<T> = Some<T> | None;
type OptionLazy<T extends Lazy> = Some<GetLazy<T>> | None;
type Some<T> = {
  _tag: 'Some';
  value: T;
};
type None = {
  _tag: 'None';
};

// type Comparable = number | OptionNorm<Comparable>;
type ComparableUn = number | OptionNorm<Lazy<ComparableUn>>;

type R = [number, number?, ...number[]];

let d!: ComparableUn;
const b = d as unknown as undefined;
